﻿'
' Boogaloo® - http://www.mindfly.com
' Copyright (c) 2008
' by Mindfly, Inc.
'
' Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
' documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
' the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 
' to permit persons to whom the Software is furnished to do so, subject to the following conditions:
'
' The above copyright notice and this permission notice shall be included in all copies or substantial portions 
' of the Software.
'
' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
' INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
' DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
' SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
' SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
' WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
' THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Imports System.Web

Imports Boogaloo.Base.UI
Imports Boogaloo.Core.BLL

Namespace UI


    Public MustInherit Class NodeControlBase
        Inherits BaseControl
        Implements INodeControlUserControl

        Private _node_control_id As Integer
        Public Property node_control_id() As Integer Implements INodeControlUserControl.node_control_id
            Get
                Return _node_control_id
            End Get
            Set(ByVal value As Integer)
                _node_control_id = value
            End Set
        End Property

#Region "Settings"

        Public Function SaveSetting(ByVal name As String, ByVal value As String, Optional ByVal always_replicate_on_publish As Boolean = True) As Boolean

            Return ControlSetting.InsertUpdateControlSetting(node_control_id, name, value, always_replicate_on_publish)

        End Function


        Public Function GetSettingAsString(ByVal key As String) As String
            If Settings.ContainsKey(key) Then
                Return Settings(key).value
            Else
                Return String.Empty
            End If
        End Function

        Public Function GetSettingAsInteger(ByVal key As String) As Integer
            Dim value As String = GetSettingAsString(key)
            If Not String.IsNullOrEmpty(value) Then
                Return CType(value, Integer)
            Else
                Return 0
            End If
        End Function

        Public Function GetSettingAsDouble(ByVal key As String) As Double
            Return CType(GetSettingAsInteger(key), Double)
        End Function

        Public Function GetSettingAsGuid(ByVal key As String) As Guid
            If Settings.ContainsKey(key) Then
                Return New Guid(Settings(key).value)
            Else
                Return Nothing
            End If
        End Function

        Public Function GetSettingAsDateTime(ByVal key As String) As DateTime
            If Settings.ContainsKey(key) Then
                Return DateTime.Parse(Settings(key).value)
            Else
                Return Nothing
            End If
        End Function

        Public Function GetSettingAsBoolean(ByVal key As String) As Boolean
            If Settings.ContainsKey(key) Then
                Return CType(Settings(key).value, Boolean)
            Else
                Return Nothing
            End If
        End Function

        Public ReadOnly Property node_control() As NodeControl
            Get
                Return NodeControl.GetNodeControl(node_control_id)
            End Get
        End Property

        Private _settings As Dictionary(Of String, ControlSetting)
        Public ReadOnly Property Settings() As Dictionary(Of String, ControlSetting) Implements INodeControlUserControl.Settings
            Get
                If _settings Is Nothing Then
                    _settings = ControlSetting.GetControlSettingsDictionary(Me.node_control_id)
                End If

                Return _settings
            End Get
        End Property


#End Region

    End Class


End Namespace